This section is intended to introduce the reader to various aspects of art which may be related to various aspects of the present invention which are described and/or claimed below. This discussion is believed to be helpful in providing the reader with background information to facilitate a better understanding of the various aspects of the present invention. Accordingly, it should be understood that these statements are to be read in this light, and not as admissions of prior art.
Since the introduction of the first personal computer (“PC”) over 20 years ago, technological advances to make PCs more useful have continued at an amazing rate. Microprocessors that control PCs have become faster and faster, with operational speeds eclipsing the gigahertz (one billion operations per second) and continuing well beyond.
Productivity has also increased tremendously because of the explosion in development of software applications. In the early days of the PC, people who could write their own programs were practically the only ones who could make productive use of their computers. Today, there are thousands and thousands of software applications ranging from games to word processors and from voice recognition to web browsers.
Not surprisingly, the increasing complexity of computers and software applications has presented technologists with some challenging obstacles along the way. One such obstacle is the continual increase in the amount of computing power that is needed to run increasingly large and complex software applications. Increased computing power is also needed to allow networked computer systems to provide services such as file and printer sharing to larger numbers of users in a cost effective manner.
The development of the multi-processor server has been a major advance in the ability of computer manufacturers to provide significant increases in computing power. Multi-processor servers may include two, four, eight or even more individual processors. The processors in a multi-processor may be configured to operate under control of an operating system (an “OS”) in a symmetric manner. Symmetric multi-processing is a term that is used to refer to a multi-processing computer system in which any processor is capable of handling any task.
Designers of multi-processor computer systems continually try to improve the versatility and flexibility of their systems to perform different tasks. Examples of tasks that may enhance the performance capabilities of multi-processor computing systems may include the ability of a single multi-processor system to operate different OSes simultaneously, or to operate multiple instances of the same operating system simultaneously. An obstacle to this goal is that some operating systems employ zero-based physical memory dependencies, which require certain portions of the OS code to be stored at specific address locations in physical memory. Such an OS may generate a virtual address, which may correspond on a 1:1 basis with an address in the physical memory map of a computer system. If the virtual address generation functionality of an OS always generates addresses in the same physical memory range for a portion of code, such as the kernel, multiple instances of that operating system cannot be executed by a single multi-processor system without conflict. In the same manner, different OSes that attempt to use the same physical memory space could not be operated simultaneously without conflict.
One method of attempting to overcome this problem may include interposing a software layer under the OS to intercept and modify virtual addresses generated by the OS. The addition of a separate software layer, however, may result in significant performance degradation of the system. Another alternative may be to modify the source code of an OS to remove physical memory dependencies, but this process would be expensive and time consuming.